/***************************************************************************/
/*                                                                         */
/*  ftbitmap.h                                                             */
/*                                                                         */
/*    FreeType utility functions for bitmaps (specification).              */
/*                                                                         */
/*  Copyright 2004, 2005, 2006, 2008 by                                    */
/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
/*                                                                         */
/*  This file is part of the FreeType project, and may only be used,       */
/*  modified, and distributed under the terms of the FreeType project      */
/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
/*  this file you indicate that you have read the license and              */
/*  understand and accept it fully.                                        */
/*                                                                         */
/***************************************************************************/


#ifndef __FTBITMAP_H__
#define __FTBITMAP_H__


#include <ft2build.h>
#include FT_FREETYPE_H

#ifdef FREETYPE_H
    #error "freetype.h of FreeType 1 has been loaded!"
    #error "Please fix the directory search order for header files"
    #error "so that freetype.h of FreeType 2 is found first."
#endif


FT_BEGIN_HEADER


/*************************************************************************/
/*                                                                       */
/* <Section>                                                             */
/*    bitmap_handling                                                    */
/*                                                                       */
/* <Title>                                                               */
/*    Bitmap Handling                                                    */
/*                                                                       */
/* <Abstract>                                                            */
/*    Handling FT_Bitmap objects.                                        */
/*                                                                       */
/* <Description>                                                         */
/*    This section contains functions for converting FT_Bitmap objects.  */
/*                                                                       */
/*************************************************************************/


/*************************************************************************/
/*                                                                       */
/* <Function>                                                            */
/*    FT_Bitmap_New                                                      */
/*                                                                       */
/* <Description>                                                         */
/*    Initialize a pointer to an @FT_Bitmap structure.                   */
/*                                                                       */
/* <InOut>                                                               */
/*    abitmap :: A pointer to the bitmap structure.                      */
/*                                                                       */
FT_EXPORT(void)
FT_Bitmap_New(FT_Bitmap * abitmap);


/*************************************************************************/
/*                                                                       */
/* <Function>                                                            */
/*    FT_Bitmap_Copy                                                     */
/*                                                                       */
/* <Description>                                                         */
/*    Copy a bitmap into another one.                                    */
/*                                                                       */
/* <Input>                                                               */
/*    library :: A handle to a library object.                           */
/*                                                                       */
/*    source  :: A handle to the source bitmap.                          */
/*                                                                       */
/* <Output>                                                              */
/*    target  :: A handle to the target bitmap.                          */
/*                                                                       */
/* <Return>                                                              */
/*    FreeType error code.  0~means success.                             */
/*                                                                       */
FT_EXPORT(FT_Error)
FT_Bitmap_Copy(FT_Library library,
               const FT_Bitmap * source,
               FT_Bitmap * target);


/*************************************************************************/
/*                                                                       */
/* <Function>                                                            */
/*    FT_Bitmap_Embolden                                                 */
/*                                                                       */
/* <Description>                                                         */
/*    Embolden a bitmap.  The new bitmap will be about `xStrength'       */
/*    pixels wider and `yStrength' pixels higher.  The left and bottom   */
/*    borders are kept unchanged.                                        */
/*                                                                       */
/* <Input>                                                               */
/*    library   :: A handle to a library object.                         */
/*                                                                       */
/*    xStrength :: How strong the glyph is emboldened horizontally.      */
/*                 Expressed in 26.6 pixel format.                       */
/*                                                                       */
/*    yStrength :: How strong the glyph is emboldened vertically.        */
/*                 Expressed in 26.6 pixel format.                       */
/*                                                                       */
/* <InOut>                                                               */
/*    bitmap    :: A handle to the target bitmap.                        */
/*                                                                       */
/* <Return>                                                              */
/*    FreeType error code.  0~means success.                             */
/*                                                                       */
/* <Note>                                                                */
/*    The current implementation restricts `xStrength' to be less than   */
/*    or equal to~8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO.      */
/*                                                                       */
/*    If you want to embolden the bitmap owned by a @FT_GlyphSlotRec,    */
/*    you should call @FT_GlyphSlot_Own_Bitmap on the slot first.        */
/*                                                                       */
FT_EXPORT(FT_Error)
FT_Bitmap_Embolden(FT_Library library,
                   FT_Bitmap * bitmap,
                   FT_Pos xStrength,
                   FT_Pos yStrength);


/*************************************************************************/
/*                                                                       */
/* <Function>                                                            */
/*    FT_Bitmap_Convert                                                  */
/*                                                                       */
/* <Description>                                                         */
/*    Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, or 8bpp to a  */
/*    bitmap object with depth 8bpp, making the number of used bytes per */
/*    line (a.k.a. the `pitch') a multiple of `alignment'.               */
/*                                                                       */
/* <Input>                                                               */
/*    library   :: A handle to a library object.                         */
/*                                                                       */
/*    source    :: The source bitmap.                                    */
/*                                                                       */
/*    alignment :: The pitch of the bitmap is a multiple of this         */
/*                 parameter.  Common values are 1, 2, or 4.             */
/*                                                                       */
/* <Output>                                                              */
/*    target    :: The target bitmap.                                    */
/*                                                                       */
/* <Return>                                                              */
/*    FreeType error code.  0~means success.                             */
/*                                                                       */
/* <Note>                                                                */
/*    It is possible to call @FT_Bitmap_Convert multiple times without   */
/*    calling @FT_Bitmap_Done (the memory is simply reallocated).        */
/*                                                                       */
/*    Use @FT_Bitmap_Done to finally remove the bitmap object.           */
/*                                                                       */
/*    The `library' argument is taken to have access to FreeType's       */
/*    memory handling functions.                                         */
/*                                                                       */
FT_EXPORT(FT_Error)
FT_Bitmap_Convert(FT_Library library,
                  const FT_Bitmap * source,
                  FT_Bitmap * target,
                  FT_Int alignment);


/*************************************************************************/
/*                                                                       */
/* <Function>                                                            */
/*    FT_GlyphSlot_Own_Bitmap                                            */
/*                                                                       */
/* <Description>                                                         */
/*    Make sure that a glyph slot owns `slot->bitmap'.                   */
/*                                                                       */
/* <Input>                                                               */
/*    slot :: The glyph slot.                                            */
/*                                                                       */
/* <Return>                                                              */
/*    FreeType error code.  0~means success.                             */
/*                                                                       */
/* <Note>                                                                */
/*    This function is to be used in combination with                    */
/*    @FT_Bitmap_Embolden.                                               */
/*                                                                       */
FT_EXPORT(FT_Error)
FT_GlyphSlot_Own_Bitmap(FT_GlyphSlot slot);


/*************************************************************************/
/*                                                                       */
/* <Function>                                                            */
/*    FT_Bitmap_Done                                                     */
/*                                                                       */
/* <Description>                                                         */
/*    Destroy a bitmap object created with @FT_Bitmap_New.               */
/*                                                                       */
/* <Input>                                                               */
/*    library :: A handle to a library object.                           */
/*                                                                       */
/*    bitmap  :: The bitmap object to be freed.                          */
/*                                                                       */
/* <Return>                                                              */
/*    FreeType error code.  0~means success.                             */
/*                                                                       */
/* <Note>                                                                */
/*    The `library' argument is taken to have access to FreeType's       */
/*    memory handling functions.                                         */
/*                                                                       */
FT_EXPORT(FT_Error)
FT_Bitmap_Done(FT_Library library,
               FT_Bitmap * bitmap);


/* */


FT_END_HEADER

#endif /* __FTBITMAP_H__ */


/* END */